// Learn TypeScript:
//  - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/typescript.html
//  - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/typescript.html
// Learn Attribute:
//  - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/reference/attributes.html
//  - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
//  - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/life-cycle-callbacks.html
//  - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/life-cycle-callbacks.html

import {IConverter} from "./IConverter";

export class JsonConverter implements IConverter{

    encode(){
        let json = {};
        for(let attr in this) {
            if (typeof this[attr] != "function"){
                json[attr] = this[attr];
            }
        }
        return json;
    }

    decode(data:any){
        if (typeof data == "string"){
            data = JSON.parse(data);
        }

        for(let attr in this) {
            if (typeof this[attr] != "function"){
                if (typeof data[attr] == "undefined") {
                    throw `${this.constructor.name}.decode data not found attr===>${attr}`;
                }
                this[attr] = data[attr];
            }
        }
        return this;
    }
}
